package com.Oct_Four;

/**
 * 777. 在LR字符串中交换相邻字符
 * 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串（例如"RXXLRXRXL"）中进行移动操作。一次移动操作指用一个"LX"替换一个"XL"，或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end，请编写代码，当且仅当存在一系列移动操作使得start可以转换成end时， 返回True。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/swap-adjacent-in-lr-string
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/10/04 15:10
 */

public class Solution777 {

    /**
     * 需要搞清楚逻辑关系，以及该题目考察的知识点
     * @param start
     * @param end
     * @return
     */
    public boolean canTransform(String start, String end) {
        //if (start.length()!=end.length()) return false;
        int n=start.length(),i=0,j=0;
        while(i<n||j<n)
        {
            while (i<n&&start.charAt(i)=='X') i++;
            while (j<n&&end.charAt(j)=='X') j++;
            if (i==n||j==n) return i==j;
            if (start.charAt(i)!=end.charAt(j)) return false;
            if (start.charAt(i)=='L'&&i<j) return false;
            if (end.charAt(j)=='R'&&i>j) return false;
            i++;
            j++;
        }
        return true;
    }

    public static void main(String[] args) {
        Solution777 solution777=new Solution777();
        System.out.println(solution777.canTransform("RXXLRXRXL","XRLXXRRLX"));
    }
}
